﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Library.UI.Grid;
using Library.UI.Form;
using QuanLyDiem.Controllers;
using QuanLyDiem.models;
namespace QuanLyDiem.QLDiem
{
    public partial class frmTaoLopHocPhan : DevExpress.XtraEditors.XtraForm
    {
        public frmTaoLopHocPhan()
        {
            InitializeComponent();
        }
        public int ID_mons = 0;
        private void TaoLopHocPhan_Load(object sender, EventArgs e)
        {
            gridView1.Config(true, false, false, false, false, false, false, false, false);
            gridView1.Config2(DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect, false, true);
            gridView2.Config(true, false, false, false, false, false, false, false, false);
            gridView2.Config2(DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect, false, true);
            Context db = new Context();
            C_TaoLopHocPhan.LoadDataSource(cmbKyhoc);
            var ID_mons = db.ChuongTrinhDaoTaos.Where(p => p.Ky_hoc == int.Parse(cmbKyhoc.Text)).Select(o => o.ID_mon).Distinct().ToList();
            //var Mon_hocs = db.MonHocs.Where(p => ID_mons.Contains(p.ID_mon)).ToList();
            var mon_hocs = new List<MonHoc>();
            foreach (var row in ID_mons)
            {
                var result = db.MonHocs.Where(p => p.ID_mon == row).First();
                mon_hocs.Add(result);
            }
            monHocBindingSource.DataSource = mon_hocs.ToList();
        }

        private void cmbKyhoc_SelectedIndexChanged(object sender, EventArgs e)
        {
            Context db = new Context();
            var ID_mons = db.ChuongTrinhDaoTaos.Where(p => p.Ky_hoc == int.Parse(cmbKyhoc.Text)).Select(o => o.ID_mon).Distinct().ToList();
            //var Mon_hocs = db.MonHocs.Where(p => ID_mons.Contains(p.ID_mon)).ToList();
            var mon_hocs = new List<MonHoc>();
            foreach (var row in ID_mons)
            {
                var result = db.MonHocs.Where(p => p.ID_mon == row).First();
                mon_hocs.Add(result);
            }
            monHocBindingSource.DataSource = mon_hocs.ToList();
        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            if (txtNamBatDau.Text == "" || txtNamKetThuc.Text == "" || txtHocKy.Text == "")
            {
                MessageBox.Show("Dữ liệu năm học hoặc học kỳ chưa được nhập");
            }
            else
            {
                Context db = new Context();
                var row = gridView1.GetFocusedRow() as MonHoc;
                ID_mons = row.ID_mon;
                var id_khoas = db.ChuongTrinhDaoTaos.Where(p => p.ID_mon == row.ID_mon).Select(o => o.ID_khoa).First();
                var lops = db.Lops.Where(p => p.ID_khoa == id_khoas).ToList();
                var result = from p in lops
                             select new EXT_Lop
                             {
                                 Trang_thai = false,
                                 ID_khoa = p.ID_khoa,
                                 ID_lop = p.ID_lop,
                                 Ten_lop = p.Ten_lop,
                                 Khoa_hoc = p.Khoa_hoc,
                                 So_sv = p.So_sv,
                                 Nien_khoa = p.Nien_khoa,
                                 Ky_hoc=ConvertKyHoc(txtNamBatDau.Text,txtNamKetThuc.Text,txtHocKy.Text,p.Nien_khoa)
                             };
                var result1 = result.Where(p => p.Ky_hoc == int.Parse(cmbKyhoc.Text)).ToList();
                eXTLopBindingSource.DataSource = result1.ToList();
            }
        }

        public int ConvertKyHoc(string NamBatDau, string NamKetThuc, string Hoc_Ky, string Nien_khoa)
        {
            int a = int.Parse(NamBatDau);
            int b = int.Parse(NamKetThuc);
            int c = int.Parse(Hoc_Ky);
            int d = int.Parse(Nien_khoa.Substring(0, Nien_khoa.IndexOf("-")));
            int e = int.Parse(Nien_khoa.Substring(Nien_khoa.IndexOf("-")+1));
            int Ky_hoc = 0;
            if (a >= d && b <= e)
            {
                Ky_hoc = (a - d) * 2 + c;
            }
            else
                return -1;
            return Ky_hoc;
        }

        private void txtNamBatDau_Validating(object sender, CancelEventArgs e)
        {
            if (string.IsNullOrEmpty(txtNamBatDau.Text) || (txtNamBatDau.Text.Length != 4))
            {
                MessageBox.Show("Chưa nhập đúng dữ liệu năm học");
                txtNamBatDau.SetFocus();
            }
            else
            {
                txtNamKetThuc.Text = (int.Parse(txtNamBatDau.Text) + 1).ToString();

            }


        }

        private void txtNamKetThuc_Validating(object sender, CancelEventArgs e)
        {
            if (string.IsNullOrEmpty(txtNamKetThuc.Text) || (txtNamKetThuc.Text.Length != 4))
            {
                MessageBox.Show("Chưa nhập đúng dữ liệu năm học");
                txtNamKetThuc.SetFocus();
            }
            else
            {
                txtNamBatDau.Text = (int.Parse(txtNamKetThuc.Text) - 1).ToString();
            }
        }
            
        private void btnTaolophocphan_Click(object sender, EventArgs e)
        {
            Context db = new Context();
            
            for (int i = 0; i < gridView2.RowCount; i++)
            {
                var row = gridView2.GetRow(i) as EXT_Lop;
                if (row.Trang_thai)
                {
                    var dsl = db.DanhSachLops.Where(p => p.ID_lop == row.ID_lop).ToList();
                    var kt = db.LopHocPhans.Where(p => p.ID_lop == row.ID_lop && p.ID_mon == ID_mons && p.Nam_hoc == string.Format(txtNamBatDau.Text + "-" + txtNamKetThuc.Text) && p.Hoc_ky == int.Parse(txtHocKy.Text)).ToList();
                    if (kt == null)
                    {

                        var lophps = new LopHocPhan
                        {
                            ID_lop = row.ID_lop,
                            ID_mon = ID_mons,
                            Hoc_ky = int.Parse(txtHocKy.Text),
                            Nam_hoc = string.Format(txtNamBatDau.Text + "-" + txtNamKetThuc.Text)
                        };
                        db.LopHocPhans.InsertOnSubmit(lophps);
                        db.SubmitChanges();
                        foreach (var sv in dsl)
                        {
                            var ID_lophp = db.LopHocPhans.Where(p => p.ID_lop == row.ID_lop && p.ID_mon == ID_mons).Select(o => o.ID_lop_hp).First();
                            var sinhvien = new DanhSachLopHocPhan
                            {
                                ID_lop_hp = ID_lophp,
                                ID_sv = sv.ID_sv
                            };
                            db.DanhSachLopHocPhans.InsertOnSubmit(sinhvien);
                            db.SubmitChanges();
                        }
                    }
                }
            }
        }
    }
}